#include "stdio.h"
#include "TGraph.h"
#include "FloydAlgSeq.h"

#include "mpi.h"

void printMatrix (int * a, int n)
{
	for (int i=0; i<n; i++)
	{
		for (int j=0; j<n; j++)
			printf("%i ", a[i*n+j]);
		printf("\n");
	}
}

int main(int argc, char* argv[] )
{
	MPI_Init(&argc, &argv);
	int rank, size;
	MPI_Comm_size(MPI_COMM_WORLD, &size);
	MPI_Comm_rank(MPI_COMM_WORLD, &rank);

	TGraph a;
	a.readFromFile("G:\\graph1.txt");
	int *d;
	d = new int[a.N()*a.N()];

	if (rank == 0)
	{
		a.fillAdjMatrix(d);
		printMatrix(d, a.N());
		printf("\n\n");
		floydSequential(a.N(),d);
		printMatrix(d,a.N());
		printf("\n\n");
	}

	fflush(stdout);
	MPI_Barrier(MPI_COMM_WORLD);
	a.fillAdjMatrix(d);
	floydMPI(a.N(), d);
	if (rank == 0)
	{
		printMatrix(d, a.N());
		fflush(stdout);
	}
	
	MPI_Finalize();
	return 0;
}